package com.itheima.day17.work;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.HashMap;

public class BeanFactory {
    //javabean工厂，服务器启动的时候就会解析xml配置文件，根据配置创建好对象
    //需要拿xml数据来，就需要对文件进行解析
    private static HashMap<String,Object> hm=new HashMap<String, Object>();
    //希望服务器启动，所有的（xml文件中的bean）对象 都存储在集合中
    static {

        try {
            //解析xml文件，将对象存储到集合
            String path = BeanFactory.class.getClassLoader().getResource("beans.xml").getPath();
            Document document = Jsoup.parse(new File(path), "utf-8");
            Elements bean = document.getElementsByTag("bean01");//Elements继承ArrayList
            //获取集合中的每一个bean标签
            for (Element element : bean) {
                String id = element.attr("id");
                String aClass = element.attr("class");//拿到一个类的全类名，本质上还是字符串
                //反射创建对象
                Class<?> aClass1 = Class.forName(aClass);
                Constructor<?> declaredConstructor = aClass1.getDeclaredConstructor();
                declaredConstructor.setAccessible(true);
                Object o = declaredConstructor.newInstance();
                //为确保集合中有值，获得property标签里的值
                Elements property = element.getElementsByTag("property");
                hm.put(id,o);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private BeanFactory(){}
    //构造器私有化，对外提供公有的方法
    public static Object getBean(String id){
        if (null==id){
            return "null";
        }
        //将id作为双列集合的key
        return hm.get(id);
    }

}
